import type { IMenuData } from './types'
import { cleanMenuData, getFlatMenus, findMenuById, processMenuData } from './core'

/**
 * 菜单相关的Vue组合式API钩子
 */

/**
 * 使用菜单数据的主要钩子函数
 * @returns 返回处理后的菜单数据和辅助函数
 */
export const useMenuData = (): IMenuData => {
  // 从本地存储获取用户信息
  const userInfo = uni.getStorageSync('userInfo')

  if (!userInfo?.Attributes?.Menus) {
    return {
      menuCategories: [],
      flatMenus: [],
      filteredMenuCategories: [],
      findMenu: () => undefined
    }
  }

  const originalMenus = userInfo.Attributes.Menus

  // 清洗菜单数据，转换为层级结构
  const menuCategories = cleanMenuData(originalMenus)

  // 获取扁平化的菜单列表
  const flatMenus = getFlatMenus(originalMenus)

  // 使用完整处理流程，包含白名单过滤
  const filteredMenuCategories = processMenuData(originalMenus)

  return {
    menuCategories,
    flatMenus,
    filteredMenuCategories,
    // 查找菜单的辅助函数
    findMenu: (menuId: string) => findMenuById(originalMenus, menuId)
  }
}

/**
 * 使用菜单数据的响应式版本（适用于Vue 3）
 * @returns 返回响应式的菜单数据
 */
export const useReactiveMenuData = () => {
  // 这里可以使用Vue 3的响应式API
  // 由于当前环境限制，先返回基础版本
  return useMenuData()
}

/**
 * 使用菜单缓存的钩子
 * @param cacheKey 缓存键名
 * @param ttl 缓存时间（毫秒）
 * @returns 返回带缓存的菜单数据
 */
export const useCachedMenuData = (cacheKey: string = 'menuData', ttl: number = 5 * 60 * 1000) => {
  const cacheTimestampKey = `${cacheKey}_timestamp`
  
  // 检查缓存是否有效
  const cachedData = uni.getStorageSync(cacheKey)
  const cachedTimestamp = uni.getStorageSync(cacheTimestampKey)
  const now = Date.now()
  
  if (cachedData && cachedTimestamp && (now - cachedTimestamp) < ttl) {
    return cachedData
  }
  
  // 获取新数据
  const menuData = useMenuData()
  
  // 缓存数据
  uni.setStorageSync(cacheKey, menuData)
  uni.setStorageSync(cacheTimestampKey, now)
  
  return menuData
}

/**
 * 清除菜单缓存
 * @param cacheKey 缓存键名
 */
export const clearMenuCache = (cacheKey: string = 'menuData') => {
  const cacheTimestampKey = `${cacheKey}_timestamp`
  uni.removeStorageSync(cacheKey)
  uni.removeStorageSync(cacheTimestampKey)
}

/**
 * 使用菜单统计信息的钩子
 * @returns 返回菜单统计信息
 */
export const useMenuStats = () => {
  const menuData = useMenuData()
  
  return {
    totalCategories: menuData.menuCategories.length,
    totalMenus: menuData.flatMenus.length,
    filteredCategories: menuData.filteredMenuCategories.length,
    filteredMenus: menuData.filteredMenuCategories.flatMap(cat => cat.children).length,
    filterRate: menuData.flatMenus.length > 0 
      ? (menuData.filteredMenuCategories.flatMap(cat => cat.children).length / menuData.flatMenus.length * 100).toFixed(1) + '%'
      : '0%'
  }
}

/**
 * 使用菜单搜索的钩子
 * @param initialKeyword 初始搜索关键词
 * @returns 返回搜索相关的状态和方法
 */
export const useMenuSearch = (initialKeyword: string = '') => {
  // 这里可以使用Vue 3的ref等响应式API
  // 由于当前环境限制，先返回基础版本
  let searchKeyword = initialKeyword
  
  const setSearchKeyword = (keyword: string) => {
    searchKeyword = keyword
  }
  
  const clearSearch = () => {
    searchKeyword = ''
  }
  
  return {
    searchKeyword,
    setSearchKeyword,
    clearSearch
  }
}
